// pages/home/home.js
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    position: 'front',
    imgSrc: '',
    isShowCamera: true,
    face_info: {},
    // 映射关系
    map: {
      gender: {
        male: '男',
        female: '女'
      },
      expression: {
        none: '不笑', smile: '微笑', laugh: '大笑'
      },
      glasses: {
        none: '无眼镜', common: '普通眼镜', sun: '墨镜'
      },
      emotion: {
        angry: '愤怒', disgust: '厌恶', fear: '恐惧', happy: '高兴',
        sad: '伤心', surprise: '惊讶', neutral: '无情绪'
      }
    },
    isHiddenFaceInfo: true
  },

  // 翻转镜头
  reverseCamera () {
    var newPosition = this.data.position === 'front'?'back':'front'
    this.setData({
      position: newPosition
    })
    console.log(newPosition)
  },

  // 拍照
  takePhoto () {
    // 先创建相机的实例对象
    const cameraContext = wx.createCameraContext()
    // 通过实例对象调用tackPhoto拍照方法
    cameraContext.takePhoto({
      quality: 'high',
      success: res => {
        this.setData({
          imgSrc: res.tempImagePath,
          isShowCamera: false
        }, () => {
          this.testFace()
        })
      },
      fail: () => {
        wx.showToast({
          title: '拍照失败'
        })
        this.setData({
          imgSrc: ''
        })
      }
    })
  },

  // 选择上传本地图片
  chooseImg () {
    wx.chooseImage({
      count: 1,
      sourceType: ['album'],
      success: res => {
        this.setData({
          imgSrc: res.tempFilePaths[0],
          isShowCamera: false
        }, () => {
          this.testFace()
        })
      },
      fail: () => {
        wx.showToast({
          title: '上传失败'
        })
        this.setData({
          imgSrc: ''
        })
      }
    })
  },

  // 重新选择
  resetChoose () {
    this.setData({
      isShowCamera: true,
      isHiddenFaceInfo: true,
      imgSrc: ''
    })
  },

  // 测颜值
  testFace () {
    // 要调用 百度AI 创建的颜值大师app  提供的人脸检测接口进行测试
    // 如果想调用人脸检测接口进行测试需提供access_token,来判断是否有权限进行调用
    // 获取到access_token
    const token = app.globalData.access_token
    // 先判断鉴权是否成功
    if (!token) {
      wx.showToast({
        title: '鉴权失败',
      })
    }

    // 鉴权成功，发送请求百度人脸检测的接口请求
    // 我们发送请求需要提交图片，此时提交base64的比较好
    // 所以我们需要将上传的图片转为base64

    // 创建文件管理器对象
    const fileManager = wx.getFileSystemManager()  
    // 通过文件管理器对象中的readFileSync这个方法读取文件并转换为base64的格式
    const imgBase64 = fileManager.readFileSync(this.data.imgSrc,'base64')
    wx.showLoading({
      title: '正在测试...',
    })
    // 发送请求
    wx.request({
      url: 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token='+token,
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      data: {
        image: imgBase64,
        image_type: 'BASE64',
        // 年龄、颜值分数、表情、性别、是否戴眼镜、情绪
        // 注意：参数之间不要加空格
        face_field: 'age,beauty,expression,gender,glasses,emotion'
      },
      success: res => {
        if(res.data.result === null) return wx.showToast({
          title: '抱歉，可能是外星生物呦！',
          icon: 'none',
          duration: 2000
        })
        setTimeout(() => {
          this.setData({
            face_info: res.data.result.face_list[0],
            isHiddenFaceInfo: false
          })
        }, 2000)
      },
      fail: () => {
        wx.showToast({
          title: '颜值测试失败',
        })
      },
      complete: () => {
        setTimeout(()=>{
          wx.hideLoading()
        },2000)
      }
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  }
})